<?php
class UsuariosController extends CustomController
{

    public function listarUsuarios()
    {
        // Check if user is logged in
        $this->userLoggedIn();
        $this->isMaster();
        // Get page and list
        $pageNumber = $this->getPage();
        $usuarios = $this->model->getUsuarios($pageNumber);
        $vars = array(
            'get_ocr_url'     => $this->link(MODULE_USUARIOS, MODULE_USUARIOS_GET_OCR).'?id=',
            'edit_action'     => $this->link(MODULE_USUARIOS, MODULE_USUARIOS_EDITAR_USUARIO).'?id=',
            'delete_action'   => $this->link(MODULE_USUARIOS, MODULE_USUARIOS_BORRAR_USUARIO).'?id=',
            'pagination_link' => $this->link(MODULE_USUARIOS, MODULE_USUARIOS_LISTAR_USUARIOS),
            'usuarios'        => $usuarios
        );
        $this->view->verUsuarios($vars);
    }

    public function getOcr()
    {
        // Check if user is logged in
        $this->userLoggedIn(true);
        $this->isMaster(true);
        // Get user ocr
        $idUser = $this->getValue('id');
        if ($user = $this->model->usuarioExists($idUser))
        {
            if (isset($user[$idUser]))
            {
                $ocrUrl = $this->model->getOcrUrl($user[$idUser]['username'], $user[$idUser]['user_secret']);
                $ocr    = file_get_contents($ocrUrl);
                header('Content-type: image/jpg');
                echo $ocr;
                die();
            }
            else // Should not happen!
            {
                die();
            }
        }
        else
        {
            die();
        }
    }

    public function nuevoUsuario()
    {
        // Check if user is logged in
        $this->userLoggedIn();
        $this->isMaster();
        // Check Post
        $vars = array(
            'action_crear_usuario' => $this->link(MODULE_USUARIOS, MODULE_USUARIOS_CREAR_USUARIO),
            'type_admin'           => USER_TYPE_ADMIN,
            'type_security'        => USER_TYPE_SECURITY_MANAGER,
            'type_master'          => USER_TYPE_MASTER,
        );
        if ($_POST)
        {
            $user = $this->getValue('user');
            $errs = $this->validateUserAndGetErrors($user);
            if (!empty($errs))
            {
                $this->error($errs);
            }
            else
            {
                $confirmLink = 'http://'.$_SERVER['HTTP_HOST'].$this->link(MODULE_REGISTER, MODULE_REGISTER_ACTION_CONFIRM).'?token=';
                if ($this->model->createUser($user, $confirmLink))
                {
                    $this->notice('Usuario creado exitosamente');
                    $this->redirectTo(MODULE_USUARIOS);
                }
                else
                {
                    $this->error('Error creando usuario. Por favor intente nuevamente.');
                }
            }
            $vars['user'] = $user;
            $vars['selected_admin']    = ($vars['user']['user_type'] == USER_TYPE_ADMIN)?'selected="selected"':'';
            $vars['selected_security'] = ($vars['user']['user_type'] == USER_TYPE_SECURITY_MANAGER)?'selected="selected"':'';
            $vars['selected_master']   = ($vars['user']['user_type'] == USER_TYPE_MASTER)?'selected="selected"':'';
        }
        // Send to view
        $this->view->nuevo($vars);
    }

    public function editarUsuario()
    {
        // Check if user is logged in
        $this->userLoggedIn();
        $this->isMaster();
        // Check ID
        $id = $this->getValue('id');
        $id = intval($id);
        if ($user = $this->model->usuarioExists($id, true))
        {
            if ($this->user->getId() == $id)
            {
                $this->error("Usted no puede editarse a si mismo.");
                $this->redirectTo(MODULE_USUARIOS);
            }
            else
            {
                $user = $user[$id];
                // Default vars
                $vars = array(
                    'action_editar_usuario' => $this->link(MODULE_USUARIOS, MODULE_USUARIOS_EDITAR_USUARIO),
                    'get_ocr_url'           => $this->link(MODULE_USUARIOS, MODULE_USUARIOS_GET_OCR).'?id='.$id,
                    'type_admin'            => USER_TYPE_ADMIN,
                    'type_security'         => USER_TYPE_SECURITY_MANAGER,
                    'type_master'           => USER_TYPE_MASTER,
                );
                // Posted data?
                if ($_POST)
                {
                    $postedUser = $this->getValue('user');
                    $errs = $this->validateUserAndGetErrors($postedUser, $id);
                    //$editPass = $user['password'];
                    $user = array_merge($user, $postedUser);
                    /*
                    if (empty($user['password']))
                    {
                        $user['password'] = $editPass;
                    }
                    */
                    if (!empty($user['regenerate_token']))
                    {
                        $vars['checked_regenerate_token'] = 'checked="checked"';
                    }
                    if (empty($errs))
                    {
                        if ($this->model->editUser($id, $user))
                        {
                            $this->notice('Usuario editado con &eacute;xito');
                            $this->redirectTo(MODULE_USUARIOS);
                        }
                        else
                        {
                            $this->error("Error editando usuario. Intente nuevamente.");
                        }
                    }
                    else
                    {
                        $this->error($errs);
                    }
                }
                else
                {
                    $user['email_repeat'] = $user['email'];
                    //$user['password'] = '';
                }
                $vars['user'] = $user;
                $vars['selected_admin']    = ($vars['user']['user_type'] == USER_TYPE_ADMIN)?'selected="selected"':'';
                $vars['selected_security'] = ($vars['user']['user_type'] == USER_TYPE_SECURITY_MANAGER)?'selected="selected"':'';
                $vars['selected_master']   = ($vars['user']['user_type'] == USER_TYPE_MASTER)?'selected="selected"':'';
                $this->view->editar($vars);
            }
        }
        else
        {
            $this->error("El usuario solicitacio no es v&aacute;lido");
            $this->redirectTo(MODULE_USUARIOS);
        }
    }

    public function borrarUsuario()
    {
        // Check if user is logged in
        $this->userLoggedIn(true);
        $this->isMaster(true);
        // Check ID
        $id = $this->getValue('id');
        $id = intval($id);
        if ($user = $this->model->usuarioExists($id, true))
        {
            if ($this->user->getId() == $id)
            {
                $this->error("Usted no puede borrarse a si mismo.");
                $this->redirectTo(MODULE_USUARIOS);
            }
            else
            {
                if ($this->model->deleteUser($id))
                {
                    $this->notice("Usuario borrado con &eacute;xito");
                }
                else
                {
                    $this->error("Usuario no pudo ser borrado");
                }
                $this->redirectTo(MODULE_USUARIOS);
            }
        }
        else
        {
            $this->error("El usuario solicitacio no es v&aacute;lido");
            $this->redirectTo(MODULE_USUARIOS);
        }
    }

    // Helper, not controller action
    private function validateUserAndGetErrors(&$user, $idUser = false)
    {
        $errs = array();
        // User type
        if (empty($user['user_type']))
        {
            $errs[]= 'El tipo de usuario es incorrecto';
            $user['user_type'] = '';
        }
        else if (($user['user_type'] != USER_TYPE_ADMIN) && ($user['user_type'] != USER_TYPE_SECURITY_MANAGER) && ($user['user_type'] != USER_TYPE_MASTER))
        {
            $errs[]= 'El tipo de usuario es incorrecto';
            $user['user_type'] = '';
        }
        // Username
        if (empty($user['username']) && (empty($idUser)))
        {
            $errs[]= 'El nombre de usuario no puede estar vac&iacute;o';
            $user['username'] = '';
        }
        else
        {
            if (empty($user['username']))
            {
                $errs[]= 'El nombre de usuario no puede estar vac&iacute;o';
                $user['username'] = '';
            }
            else
            {
                $inUse = $this->model->usernameInUse($user['username']);
                if ($inUse)
                {
                    if ($idUser)
                    {
                        if (!isset($inUse[$idUser]))
                        {
                            $errs[]= 'El nombre de usuario elegido ya se encuentra en uso';
                            $user['username'] = '';
                        }
                    }
                    else
                    {
                        $errs[]= 'El nombre de usuario elegido ya se encuentra en uso';
                        $user['username'] = '';
                    }
                }
            }
        }
        /*
        // Passwords
        if (empty($user['password']) && (empty($idUser)))
        {
            $errs[]= 'La contrase&ntilde;a no puede estar vac&iacute;a';
            $user['password'] = '';
        }
        if (empty($user['password_repeat']) && (empty($idUser)))
        {
            $errs[]= 'La repetici&oacute;n de la contrase&ntilde;a no puede estar vac&iacute;a';
            $user['password_repeat'] = '';
        }
        if ($user['password'] != $user['password_repeat'])
        {
            $errs[]= 'Las contrase&ntilde;as no coinciden';
            $user['password'] = '';
            $user['password_repeat'] = '';
        }
        */
        // Emails
        if (empty($user['email']))
        {
            $errs[]= 'El email no puede estar vac&iacute;o';
            $user['email'] = '';
        }
        else if (!validEmail($user['email']))
        {
            $errs[]= 'El email no es correcto';
            $user['email'] = '';
        }
        if (empty($user['email_repeat']))
        {
            $errs[]= 'La repetici&oacute;n de email no puede estar vac&iacute;o';
            $user['email_repeat'] = '';
        }
        if ($user['email'] != $user['email_repeat'])
        {
            $errs[]= 'Los emails no coinciden';
            $user['email'] = '';
            $user['email_repeat'] = '';
        }
        else if (!empty($user['email']))
        {
            $inUse = $this->model->emailInUse($user['email']);
            if ($inUse)
            {
                if ($idUser)
                {
                    if (!isset($inUse[$idUser]))
                    {
                        $errs[]= 'El email elegido ya se encuentra en uso';
                        $user['email'] = '';
                        $user['email_repeat'] = '';
                    }
                }
                else
                {
                    $errs[]= 'El email elegido ya se encuentra en uso';
                    $user['email'] = '';
                    $user['email_repeat'] = '';
                }
            }
        }
        // Profile
        if (empty($user['fname']))
        {
            $errs[]= 'El nombre no puede estar vac&iacute;o';
            $user['fname'] = '';
        }
        if (empty($user['lname']))
        {
            $errs[]= 'El apellido no puede estar vac&iacute;o';
            $user['lname'] = '';
        }
        // Return
        return $errs;
    }

}
?>